import axios from "axios";
import router from "@/router";
import { ElMessage } from "element-plus";

const promptCooldown = 1000; // 冷却时间窗口，单位为毫秒（例如5秒）

// 从 localStorage 中获取上次提示时间，默认为 0
let lastLoginPromptTime =
  parseInt(localStorage.getItem("lastLoginPromptTime")) || 0;

// 创建 axios 实例对象
const request = axios.create({
  baseURL: "/api",
  timeout: 600000,
});

// axios 的请求拦截器，从 localStorage 中获取登录用户信息，并存入请求头中
request.interceptors.request.use((config) => {
  const loginUserStr = localStorage.getItem("user");
  if (loginUserStr && loginUserStr.length > 0) {
    const token = JSON.parse(loginUserStr).token;
    if (token) {
      config.headers["token"] = token;
    }
  }
  return config;
});

// axios 的响应拦截器
request.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    if (error.response && error.response.status === 401) {
      // 检查是否在冷却时间内
      router.push("/login");
      const currentTime = Date.now();
      console.log("Current time:", currentTime); // 打印当前时间
      console.log("Last login prompt time before update:", lastLoginPromptTime); // 打印更新前的值
      if (currentTime - lastLoginPromptTime > promptCooldown) {
        ElMessage.error("滚回登录");
        lastLoginPromptTime = currentTime; // 更新提示时间戳
        localStorage.setItem("lastLoginPromptTime", lastLoginPromptTime); // 将更新后的时间存入 localStorage
        console.log(
          "Last login prompt time after update:",
          lastLoginPromptTime
        ); // 打印更新后的值
      }
    }
    return Promise.reject(error);
  }
);

export default request;
